
# =============================================================================================================
# =============================================================================================================

# step 1: 修改机器基本信息 hosts
vi /etc/hosts

# 配置内容如下
192.168.3.71   CNT7XFLINK01
192.168.3.72   CNT7XFLINK02
192.168.3.73   CNT7XFLINK03

# =============================================================================================================
# =============================================================================================================

# step 1: 安装系统依赖软件
# 修改yum为国内镜像 === 看具体情况，有时候国内镜像不一定完整，这个时候还是要切换回国外地址
# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup-linux && \
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all && \
yum makecache

# 清理掉无用的repo
yum --enablerepo=base clean metadata

# =============================================================================================================
# =============================================================================================================

# step 2: 创建zookeper安装目录
mkdir -p /opt/soft/{jdk,flink}
# 然后上传jdk或flink 二进制文件到上面创建的软件目录

# 创建zookeeper的安装主目录
mkdir -p /app/flink && \
# 创建zookeeper的数据主目录
mkdir -p /data/flink && \
# 创建zookeeper的日志主目录
mkdir -p /log/flink

# =============================================================================================================
# =============================================================================================================

# step 3: zookeeper安装用户和组的创建
# 使用root用户，进行如下操作：
# 创建ops_install组
groupadd  -g 5000 ops_install

# 创建ops_admin组
groupadd  -g 501 ops_admin

# 创建zookeeper用户
useradd -g ops_install  -G  ops_admin  flink_admin

# 修改zookeeper密码
echo 'password'|passwd --stdin flink_admin

# 删除用户和其以来的用户文件
# userdel -r flink_admin
# 查看用户zookeeper权限是否设置正确，正确输出结果如下
# id flink_admin
# [root@CNT7XFLINK01 ~]# id flink_admin
# uid=1001(flink_admin) gid=5000(ops_install) groups=5000(ops_install),501(ops_admin)

# =============================================================================================================
# =============================================================================================================

# step 4: 安装用户的profile文件的设置

# 编辑/etc/profile，加入以下内容
vi /etc/profile
# -----------------------java env-----------------------------------------------------------------
JAVA_HOME=/env/jdk/jdk-12.0.2
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# -----------------------java env-----------------------------------------------------------------

# -----------------------flink env---------------------------------------------------------------
FLINK_HOME=/app/flink
PATH=$FLINK_HOME/bin:$PATH
# -----------------------flink env---------------------------------------------------------------

# 生效配置环境变量
source /etc/profile

# 检查生效环境变量
env | grep FLINK
env | grep JAVA

# =============================================================================================================
# ============================================================================================================= 

# step 5: 安装jdk
# 创建jdk的软件目录和安装目录，分别如下：
mkdir -p /opt/soft/jdk/ && \
mkdir -p /env/jdk/

# 然后，通过WinSCP工具，把JDK 二进制安装包tar复制到软件目录
ls -al /opt/soft/jdk/jdk-12.0.2_linux-x64_bin.tar.gz

# 解压jdk到安装目录
tar -zxvf /opt/soft/jdk/jdk-12.0.2_linux-x64_bin.tar.gz -C /env/jdk/

# =============================================================================================================
# ============================================================================================================= 

# step 6: 安装 flink 
# 创建jdk的软件目录和安装目录，分别如下：
mkdir -p /opt/soft/flink/ && \
mkdir -p /app/flink/

# 然后，通过WinSCP工具，把flink二进制安装包tar复制到软件目录
ls -al /opt/soft/flink/flink-1.12.0-bin-scala_2.12.tgz

# 解压flink到安装目录
tar -zxvf /opt/soft/flink/flink-1.12.0-bin-scala_2.12.tgz -C /app/flink/

# 复制文件到指定的flink安装目录
mv /app/flink/flink-1.12.0/*   /app/flink/

# 删除空目录
rmdir /app/flink/flink-1.12.0/

# =============================================================================================================
# ============================================================================================================= 

# step 7: 配置 flink 文件 conf/flink-conf.yaml

# 修改配置参数，如下
# manager-server 为master机器的名称
# jobmanager.rpc.address: ${manager-server}
jobmanager.rpc.address: CNT7XFLINK01

# =============================================================================================================
# ============================================================================================================= 

# step 7: 配置 flink 文件 conf/masters

# 修改配置参数，如下
# manager-server 为master机器的名称
# ${manager-server}:8081
# localhost:8081
CNT7XFLINK01:8081

# =============================================================================================================
# ============================================================================================================= 

# step 7: 配置 flink 文件 conf/workers (注意：低版本的flink文件名为slave)

# 修改配置参数，如下
# worker-server 为worker或slave机器的名称
# ${worker-server-1}
# ${worker-server-2}
# ${worker-server-3}
#localhost
CNT7XFLINK02
CNT7XFLINK03

# =============================================================================================================
# ============================================================================================================= 

# step 8: 复制文件
# 将安装目录，复制到其他两个work节点
scp -r /app/flink/conf/* CNT7XFLINK02:/app/flink/conf/
scp -r /app/flink/conf/* CNT7XFLINK03:/app/flink/conf/

# =============================================================================================================
# ============================================================================================================= 

# step 9: 启动master节点

# 启动集群
# 备注：只能在master节点上面，执行此命令
cd /app/flink/bin
./start-cluster.sh
# 输出结果如下：因为没有设置三台机器的SSH免密登录，所以要分别输入两个work-server节点的机器账号的密码
# [root@CNT7XFLINK01 ~]# cd /app/flink/bin
# [root@CNT7XFLINK01 bin]# 
# [root@CNT7XFLINK01 bin]# ./start-cluster.sh
# Starting cluster.
# Starting standalonesession daemon on host CNT7XFLINK01.
# root@cnt7xflink02's password: 
# Permission denied, please try again.
# root@cnt7xflink02's password: 
# Starting taskexecutor daemon on host CNT7XFLINK02.
# root@cnt7xflink03's password: 
# Starting taskexecutor daemon on host CNT7XFLINK03.

# 查看flink 进程
ps -ef | grep flink
netstat -nltp
##  输出结果，如下：
# [root@CNT7XFLINK01 bin]# ps -ef | grep flink
# root       1801      1  4 09:40 pts/0    00:00:08 java -Xmx1073741824 -Xms1073741824 -XX:MaxMetaspaceSize=268435456 -Dlog.file=/app/flink/log/flink-root-standalonesession-0-CNT7XFLINK01.log -Dlog4j.configuration=file:/app/flink/conf/log4j.properties -Dlog4j.configurationFile=file:/app/flink/conf/log4j.properties -Dlogback.configurationFile=file:/app/flink/conf/logback.xml -classpath /app/flink/lib/flink-csv-1.12.0.jar:/app/flink/lib/flink-json-1.12.0.jar:/app/flink/lib/flink-shaded-zookeeper-3.4.14.jar:/app/flink/lib/flink-table_2.12-1.12.0.jar:/app/flink/lib/flink-table-blink_2.12-1.12.0.jar:/app/flink/lib/log4j-1.2-api-2.12.1.jar:/app/flink/lib/log4j-api-2.12.1.jar:/app/flink/lib/log4j-core-2.12.1.jar:/app/flink/lib/log4j-slf4j-impl-2.12.1.jar:/app/flink/lib/flink-dist_2.12-1.12.0.jar::: org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint --configDir /app/flink/conf --executionMode cluster -D jobmanager.memory.off-heap.size=134217728b -D jobmanager.memory.jvm-overhead.min=201326592b -D jobmanager.memory.jvm-metaspace.size=268435456b -D jobmanager.memory.heap.size=1073741824b -D jobmanager.memory.jvm-overhead.max=201326592b
# root       1889    976  0 09:43 pts/0    00:00:00 grep --color=auto flink
# [root@CNT7XFLINK01 bin]# 
# [root@CNT7XFLINK01 bin]# netstat -nltp
# Active Internet connections (only servers)
# Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
# tcp        0      0 0.0.0.0:41963           0.0.0.0:*               LISTEN      1801/java           
# tcp        0      0 0.0.0.0:6123            0.0.0.0:*               LISTEN      1801/java           
# tcp        0      0 0.0.0.0:33904           0.0.0.0:*               LISTEN      1801/java           
# tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      1801/java           
# tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      920/sshd            
# tcp6       0      0 :::22                   :::*                    LISTEN      920/sshd   

# 停止集群
./stop-cluster.sh


# =============================================================================================================
# =============================================================================================================

# step 10: 安装SSH，实现各个节点免密码登录

# 分别在所有的机器上，制作密钥和公钥，分别执行如下命令

# step 1. 制作密钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

# step 2. 制作公钥，将公钥导入authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

# step 3设置当前机器节点无密码登录，执行命令后，选择yes
# ssh ${当前的 机器名称 或机器IP}
ssh CNT7XFLINK01
exit

# step 4: 方法1
# 如下，复制当前节点的公钥内容，到其他两个机器节点：CNT7XFLINK01 、 CNT7XFLINK03
# 节点2
scp ~/.ssh/authorized_keys root@CNT7XFLINK01:~/.ssh/authorized_keys_from_other_server
cat authorized_keys_from_master  >>  authorized_keys
ssh CNT7XFLINK01
cat ~/.ssh/authorized_keys_from_other_server  >>  ~/.ssh/authorized_keys
# 节点3
scp ~/.ssh/authorized_keys root@CNT7XFLINK03:~/.ssh/authorized_keys_from_other_server
cat authorized_keys_from_master  >>  authorized_keys
ssh CNT7XFLINK03
cat ~/.ssh/authorized_keys_from_other_server  >>  ~/.ssh/authorized_keys

# ste 5：方法2
# 或者，手动复制其他节点机器的公钥内容到当前节点CNT7XFLINK01文件 ~/.ssh/authorized_keys 
# 然后，在将完整的包含所有机器节点公钥内容的文件 ~/.ssh/authorized_keys ，替换到其他剩余机器节点 ~/.ssh/authorized_keys 。


# =============================================================================================================
# =============================================================================================================


# =============================================================================================================
# =============================================================================================================  